home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / System / XFD / Developer / Sources / ASM / VDCO.a < prev    next >
Encoding:
Text File  |  2001-09-16  |  2.6 KB  |  130 lines

  1. *******************************************************
  2. **     XFD external decruncher for VDCO Cruncher     **
  3. **        written by Mr. Larmer / Wanted Team        **
  4. **       shortened and fixed by SDI in 1999           **
  5. *******************************************************
  6.  
  7.         INCLUDE    "AINCLUDE:IncDirs.i"
  8.         INCLUDE    "libraries/xfdmaster.i"
  9.         INCLUDE    "lvo.i"
  10.  
  11.         * head function for tests
  12. *        INCLUDE    "xfdExeHead.a"
  13.  
  14. ; xfdForeman structure MUST be first thing in all external decrunchers
  15.  
  16. ForeMan        moveq    #-1,d0        ;security
  17.         rts
  18.         dc.l    XFDF_ID        ;id
  19.         dc.w    1        ;version
  20.         dc.w    0
  21.         dc.l    0,0        ;private
  22.         dc.l    S_VDCO        ;first slave
  23.  
  24. **************************************************
  25.  
  26.         dc.b    "$VER: VDCO 2.0 (26.07.1999)",0
  27. N_VDCO        dc.b    "Virtual Dreams (VDCO) Data Cruncher",0
  28.         EVEN
  29.  
  30. **************************************************
  31.  
  32. S_VDCO        dc.l    0        ;no more slaves
  33.         dc.w    2        ;version
  34.         dc.w    39        ;master version
  35.         dc.l    N_VDCO        ;name
  36.         dc.w    XFDPFF_DATA|XFDPFF_USERTARGET|XFDPFF_RECOGLEN
  37.         dc.w    0
  38.         dc.l    RB_VDCO        ;recog buffer
  39.         dc.l    DB_VDCO        ;decrunch buffer
  40.         dc.l    0        ;recog segment
  41.         dc.l    0        ;decrunch segment
  42.         dc.w    0,0
  43.         dc.l    12
  44.  
  45. ;-------------------------------------------------
  46.  
  47. RB_VDCO        MOVEQ    #0,D0
  48.         CMP.L    #"VDCO",(A0)
  49.         BNE.B    .Exit
  50.         TST.B    4(A0)
  51.         BNE.B    .Exit
  52.         TST.B    8(A0)
  53.         BNE.B    .Exit
  54.         MOVE.L    4(A0),D0
  55.         MOVE.L    D0,xfdrr_MinTargetLen(A1)
  56.         MOVE.L    D0,xfdrr_FinalTargetLen(A1)
  57.         MOVEQ    #12,D0
  58.         ADD.L    8(A0),D0        * most files are some bytes longer
  59.         MOVE.L    D0,xfdrr_MinSourceLen(A1)
  60.         MOVEQ    #1,D0
  61. .Exit        RTS
  62.  
  63. ;-------------------------------------------------
  64.  
  65. DB_VDCO        MOVEM.L    D2-D7/A2-A6,-(A7)
  66.         MOVE.L    A0,A5
  67.         MOVE.L    xfdbi_UserTargetBuf(A5),A1
  68.         MOVE.L    A1,A3
  69.         ADDA.L    xfdbi_TargetBufSaveLen(A5),A3
  70.         MOVE.L    xfdbi_SourceBuffer(A5),A0
  71.  
  72.         LEA    12(A0),A0
  73.         MOVEQ    #15,D7
  74.         MOVEQ    #4,D6
  75.         TST.B    (A0)+
  76.         BEQ.B    .vdco3
  77.         MOVEQ    #$1F,D7
  78.         MOVEQ    #3,D6
  79.         BRA.B    .vdco3
  80.  
  81. .vdco2        LEA    8(A1),A4
  82.         CMP.L    A3,A4
  83.         BHI.B    .err
  84.         MOVE.B    (A0)+,(A1)+
  85.         MOVE.B    (A0)+,(A1)+
  86.         MOVE.B    (A0)+,(A1)+
  87.         MOVE.B    (A0)+,(A1)+
  88.         MOVE.B    (A0)+,(A1)+
  89.         MOVE.B    (A0)+,(A1)+
  90.         MOVE.B    (A0)+,(A1)+
  91.         MOVE.B    (A0)+,(A1)+
  92. .vdco3        MOVE.B    (A0)+,D0
  93.         BEQ.B    .vdco2
  94.         MOVEQ    #7,D1
  95. .vdco4        ADD.B    D0,D0
  96.         BCS.B    .vdco5
  97.         CMP.L    A3,A1
  98.         BEQ.B    .err
  99.         MOVE.B    (A0)+,(A1)+
  100.         DBRA    D1,.vdco4
  101.         BRA.B    .vdco3
  102.  
  103. .vdco5        MOVEQ    #0,D2
  104.         MOVE.B    (A0)+,D2
  105.         BEQ.B    .end
  106.         MOVE.L    D7,D3
  107.         AND.W    D2,D3
  108.         LSL.W    D6,D2
  109.         MOVE.B    (A0)+,D2
  110.         MOVEA.L    A1,A2
  111.         SUBA.W    D2,A2
  112.         ADDQ.W    #1,D3
  113.         LEA    1(A1,D3.W),A4
  114.         CMP.L    A3,A4
  115.         BHI.B    .err
  116. .loop        MOVE.B    (A2)+,(A1)+
  117.         DBRA    D3,.loop
  118.         DBRA    D1,.vdco4
  119.         BRA.B    .vdco3
  120.  
  121. .end        MOVEQ    #1,D0
  122.         CMP.L    A3,A1
  123.         BEQ.B    .ok
  124. .err        MOVEQ    #0,D0
  125.         MOVE.W    #XFDERR_CORRUPTEDDATA,xfdbi_Error(A5)
  126. .ok        MOVEM.L    (A7)+,D2-D7/A2-A6
  127.         RTS
  128.  
  129.         END
  130.